﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Espam.Idiomas.Decimo.Tesis.Datos;
using System.Data;
using System.Data.SqlClient;


namespace Espam.Idiomas.Decimo.Tesis.Negocio
{
	public class Usuarios:Docentes
	{
		public int idUsuario
		{
			get;
			set;
		}
		public int idAlumno { get; set; }
		public int idDocente { get; set; }
		public int idAdmin { get; set; }
		public string usuario { get; set; }
		//public string clave { get; set; }
		public string rol { get; set; }
		public string semestre { get; set; }
		public int idSemestre { get; set; }
		public string carrera { get; set; }
		public DateTime fechaEntrada { get; set; }
		public DateTime horaEntrada { get; set; }
		public string ip { get; set; }
		public int idUsuarioTipo { get; set; }
		public string libro {get;set;}
		public string patchLibro {get;set;}
		public string unidades { get; set; }
		public int nivel { get; set; }
		public int idHorario { get; set; }
		public float parametro1 { get; set; }
		public float parametro2 { get; set; }
		public float parametro3 { get; set; }
		public float parametro4 { get; set; }
		public float supletorio { get; set; }
		public float examenFinal { get; set; }
		public float promedio { get; set; }
		public int ciclo { get; set; }
		public string nivelDescripcion { get; set; }
		public string horario { get; set; }
		public int idCarrera { get; set; }
		public int num { get; set; }
		public int idModulo { get; set; }
		public float subTotal { get; set; }
		public float total { get; set; }
		public object primero {get;set;}
		public object segundo { get; set; }
		public object tercero { get; set; }
		public object cuarto {get;set;}
		public object quinto { get; set; }
		public object sexto { get; set; }
		public object septimo { get; set; }
		public object octavo { get; set; }
		public string UltimoNivelAprobado { get; set; }
        public string fecha { get; set; }
        public DateTime fechaInicio { get; set; }
        public DateTime fechaFin { get; set; }
        public int idExonerado { get; set; }
        public string estadoMatricula { get; set; }
        public int identificador { get; set; }
        public string modulo { get; set; }
        public int numeroMatricula { get; set; }

        private string codigo;
		public string Codigo
		{
			get
			{
				return this.codigo; 
			}
			set
			{
				codigo = value;
			}
		}
		public string claveNueva { get; set; }
		

		public List<Usuarios> Login()
		{
			List<Usuarios> lista = new List<Usuarios>();
			BaseDatos oBase = new BaseDatos();
			SqlDataReader reader;
			string tipoRol = "";
			try
			{ 
				string consulta = string.Format("sp_loginUsuarios");
				SqlCommand comando = new SqlCommand();
				comando.CommandText = consulta;
				comando.Connection = oBase.conexion;
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("usuario", usuario);
				comando.Parameters.AddWithValue("clave", clave);
				oBase.Conectar();
				reader = comando.ExecuteReader();
				while (reader.Read())
				{
					Usuarios oUsuarios = new Usuarios();
					oUsuarios.usuario = reader.GetString(0);
					oUsuarios.clave = reader.GetString(1);
					oUsuarios.cadenaPicPerfil = reader.GetString(2);
					oUsuarios.rol = reader.GetString(3);
					tipoRol = reader.GetString(3);
					oUsuarios.nombres = reader.GetString(4);
					oUsuarios.apellidos = reader.GetString(5);
					oUsuarios.genero = reader.GetString(6);
					oUsuarios.estado = reader.GetString(7);

					if (tipoRol == "Alumno")
					{
						oUsuarios.semestre = reader.GetString(8);
						oUsuarios.carrera = reader.GetString(9);
						oUsuarios.valorID = reader.GetInt32(10);
						oUsuarios.idAlumno = reader.GetInt32(11);
						oUsuarios.idUsuario = reader.GetInt32(12);

					}
					else if (tipoRol == "Docente")
					{
						oUsuarios.cadenaCV = reader.GetString(8);
						oUsuarios.titulo = reader.GetString(9);
						oUsuarios.valorID = reader.GetInt32(10);
						oUsuarios.idDocente = reader.GetInt32(11);
						oUsuarios.idUsuario = reader.GetInt32(12);

					}
					else if (tipoRol == "Administradores")
					{
						oUsuarios.valorID = reader.GetInt32(8);
						oUsuarios.idAdmin = reader.GetInt32(9);
						oUsuarios.idUsuario = reader.GetInt32(10);

					}
					lista.Add(oUsuarios);
				}
			}
			catch (Exception)
			{
				throw;
			}
			finally
			{
				oBase.CerrarConexion();
			}
			return lista;
		}
		public string SaveAccesos()
		{
			BaseDatos oBase = new BaseDatos();
			SqlDataReader reader;
			string mensaje="";
			try
			{
				string consulta = string.Format("sp_insertAccesos");
				SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("@idUsuario", idUsuario);
				comando.Parameters.AddWithValue("@fechaEntrada", fechaEntrada);
				comando.Parameters.AddWithValue("@horaEntrada", horaEntrada);
				comando.Parameters.AddWithValue("@ip", ip);
				oBase.Conectar();
				reader = comando.ExecuteReader();
				while (reader.Read())
				{
					mensaje = reader.GetString(0);
				}

			}
			catch (Exception ex)
			{
				mensaje = ex.Message;
			}
			finally
			{
				oBase.CerrarConexion();
			}
			return mensaje;
		}
        /// <summary>
        /// para actualizar el semestre del estudiate cada q ingrese al sistema
        /// </summary>
        /// <param name="_idAlumno"></param>
        /// <param name="_idSemestre"></param>
        /// <returns></returns>
        public string UpdateSemestresAccesos(int _idAlumno,int _idSemestre)
        {
            BaseDatos oBase = new BaseDatos();
            SqlDataReader reader;
            string mensaje = "";
            try
            {
                string consulta = string.Format("sp_ActualizarDatosAlumno");
                SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("@idAlumno", _idAlumno);
                comando.Parameters.AddWithValue("@idSemestre", _idSemestre);
                oBase.Conectar();
                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    mensaje = reader.GetString(0);
                }

            }
            catch (Exception ex)
            {
                mensaje = ex.Message;
            }
            finally
            {
                oBase.CerrarConexion();
            }
            return mensaje;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="_idAlumno"></param>
        /// <param name="_idSemestre"></param>
        /// <returns></returns>
        public string UpdateNombresAccesos(int _idAlumno, string  _nombre, string _apellido)
        {
            BaseDatos oBase = new BaseDatos();
            SqlDataReader reader;
            string mensaje = "";
            try
            {
                string consulta = string.Format("sp_ActualizarNombresEstudiantes");
                SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("@idAlumno", _idAlumno);
                comando.Parameters.AddWithValue("@nombres", _nombre);
                comando.Parameters.AddWithValue("@apellidos", _apellido);

                oBase.Conectar();
                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    mensaje = reader.GetString(0);
                }

            }
            catch (Exception ex)
            {
                mensaje = ex.Message;
            }
            finally
            {
                oBase.CerrarConexion();
            }
            return mensaje;
        }
        public List<Usuarios> GetListaRoles()
		{
			BaseDatos oBase = new BaseDatos();
			List<Usuarios> lista = new List<Usuarios>();
			SqlDataReader reader;
			try
			{
				string consulta = string.Format("sp_getTipoRoles");
				SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
				comando.CommandType = CommandType.StoredProcedure;
				oBase.Conectar();
				reader = comando.ExecuteReader();
				while (reader.Read())
				{
					Usuarios oUsu = new Usuarios();
					oUsu.idRol = reader.GetInt32(0);
					oUsu.rol = reader.GetString(1);
					lista.Add(oUsu);
				}
			}
			catch (Exception)
			{
			}
			finally
			{
				oBase.CerrarConexion();
			}
			return lista;
		}

		public List<Usuarios> ConsultaAlumnoSiExiste()
		{
			BaseDatos oBase = new BaseDatos();
			List<Usuarios> lista = new List<Usuarios>();
			SqlDataReader reader;
			try
			{
				string consulta = string.Format("sp_ConsultaSiExisteAlumno");
				SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("@semestre", semestre);
				comando.Parameters.AddWithValue("@carrera", carrera);
				comando.Parameters.AddWithValue("@documento", documento);
				oBase.Conectar();
				reader = comando.ExecuteReader();
				while (reader.Read())
				{
					Usuarios oUsuarios = new Usuarios();
					oUsuarios.usuario = reader.GetString(0);
					oUsuarios.clave = reader.GetString(1);
					oUsuarios.cadenaPicPerfil = reader.GetString(2);
					oUsuarios.rol = reader.GetString(3);
					oUsuarios.nombres = reader.GetString(4);
					oUsuarios.apellidos = reader.GetString(5);
					oUsuarios.estado = reader.GetString(6);
					oUsuarios.semestre = reader.GetString(7);
					oUsuarios.carrera = reader.GetString(8);
					oUsuarios.valorID = reader.GetInt32(9);
					oUsuarios.idAlumno = reader.GetInt32(10);
					oUsuarios.idUsuario = reader.GetInt32(11);
					oUsuarios.idUsuarioTipo = reader.GetInt32(12);
					lista.Add(oUsuarios);
				}
			}
			catch (Exception)
			{
				lista = null;
			}
			finally
			{
				oBase.CerrarConexion();
			}
			return lista;
		}
		public List<Usuarios> LoginAdministradores(string tag)
		{
			BaseDatos oBase = new BaseDatos();
			List<Usuarios> lista = new List<Usuarios>();
			SqlDataReader reader;
			try
			{
				if (tag == "Administradores")
				{
					string consulta = string.Format("sp_loginAdministradores");
					SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
					comando.CommandType = CommandType.StoredProcedure;
					comando.Parameters.AddWithValue("usuario", usuario);
					comando.Parameters.AddWithValue("clave", clave);
					comando.Parameters.AddWithValue("rol", rol);
					oBase.Conectar();
					reader = comando.ExecuteReader();
					while (reader.Read())
					{
						Usuarios oUsuarios = new Usuarios();
						oUsuarios.usuario = reader.GetString(0);
						oUsuarios.clave = reader.GetString(1);
						oUsuarios.cadenaPicPerfil = reader.GetString(2);
						oUsuarios.rol = reader.GetString(3);
						oUsuarios.nombres = reader.GetString(4);
						oUsuarios.apellidos = reader.GetString(5);
						oUsuarios.genero = reader.GetString(6);
						oUsuarios.estado = reader.GetString(7);
						oUsuarios.valorID = reader.GetInt32(8);
						oUsuarios.idAdmin = reader.GetInt32(9);
						oUsuarios.idUsuario = reader.GetInt32(10);
						oUsuarios.idUsuarioTipo = reader.GetInt32(11);
						lista.Add(oUsuarios);
					}
					
				}
				else if (tag=="Docente")
				{
					string consulta = string.Format("sp_loginAdministradores");
					SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
					comando.CommandType = CommandType.StoredProcedure;
					comando.Parameters.AddWithValue("usuario", usuario);
					comando.Parameters.AddWithValue("clave", clave);
					comando.Parameters.AddWithValue("rol", rol);
					oBase.Conectar();
					reader = comando.ExecuteReader();
					while (reader.Read())
					{
						Usuarios oUsuarios = new Usuarios();
						oUsuarios.usuario = reader.GetString(0);
						oUsuarios.clave = reader.GetString(1);
						oUsuarios.cadenaPicPerfil = reader.GetString(2);
						oUsuarios.rol = reader.GetString(3);
						oUsuarios.nombres = reader.GetString(4);
						oUsuarios.apellidos = reader.GetString(5);
						oUsuarios.genero = reader.GetString(6);
						oUsuarios.estado = reader.GetString(7);
						oUsuarios.cadenaCV = reader.GetString(8);
						oUsuarios.titulo = reader.GetString(9);
						oUsuarios.valorID = reader.GetInt32(10);
						oUsuarios.idDocente = reader.GetInt32(11);
						oUsuarios.idUsuario = reader.GetInt32(12);
						oUsuarios.idUsuarioTipo = reader.GetInt32(13);
						lista.Add(oUsuarios);

					}
				}
                else if (tag == "Secretaria")
                {
                    string consulta = string.Format("sp_loginAdministradores");
                    SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
                    comando.CommandType = CommandType.StoredProcedure;
                    comando.Parameters.AddWithValue("usuario", usuario);
                    comando.Parameters.AddWithValue("clave", clave);
                    comando.Parameters.AddWithValue("rol", rol);
                    oBase.Conectar();
                    reader = comando.ExecuteReader();
                    while (reader.Read())
                    {
                        Usuarios oUsuarios = new Usuarios();
                        oUsuarios.usuario = reader.GetString(0);
                        oUsuarios.clave = reader.GetString(1);
                        oUsuarios.cadenaPicPerfil = reader.GetString(2);
                        oUsuarios.rol = reader.GetString(3);
                        oUsuarios.nombres = reader.GetString(4);
                        oUsuarios.apellidos = reader.GetString(5);
                        oUsuarios.genero = reader.GetString(6);
                        oUsuarios.estado = reader.GetString(7);
                        //oUsuarios.cadenaCV = reader.GetString(8);
                        //oUsuarios.titulo = reader.GetString(9);
                        //oUsuarios.valorID = reader.GetInt32(10);
                        oUsuarios.idAdmin = reader.GetInt32(8);
                        oUsuarios.idUsuario = reader.GetInt32(9);
                        oUsuarios.idUsuarioTipo = reader.GetInt32(10);
                        lista.Add(oUsuarios);
                    }
                }


            }
			catch (Exception)
			{
				lista = null;
			}
			finally
			{
				oBase.CerrarConexion();
			}
			return lista;
		}
		public List<Usuarios> RegistraUsuarioExistente()
		{
			BaseDatos oBase = new BaseDatos();
			List<Usuarios> lista = new List<Usuarios>();
			SqlDataReader reader;
			try
			{
				string consulta = string.Format("sp_registraEstudianteExistente");
				SqlCommand comando = new SqlCommand();
				comando.CommandText = consulta;
				comando.Connection = oBase.conexion;
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("@nombres",nombres);
				comando.Parameters.AddWithValue("@apellidos", apellidos);
				comando.Parameters.AddWithValue("@documento", documento);
				comando.Parameters.AddWithValue("@estado", estado);
				comando.Parameters.AddWithValue("@clave", clave);
				comando.Parameters.AddWithValue("@cadenaPicPerfil", cadenaPicPerfil);
				comando.Parameters.AddWithValue("@idRol", idRol);
				comando.Parameters.AddWithValue("@semestre", semestre);
				comando.Parameters.AddWithValue("@carrera", carrera);
				oBase.Conectar();
				reader = comando.ExecuteReader();
				while (reader.Read())
				{
					Usuarios oUsuarios = new Usuarios();
					oUsuarios.usuario = reader.GetString(0);
					oUsuarios.clave = reader.GetString(1);
					oUsuarios.cadenaPicPerfil = reader.GetString(2);
					oUsuarios.rol = reader.GetString(3);
					oUsuarios.nombres = reader.GetString(4);
					oUsuarios.apellidos = reader.GetString(5);
				   //oUsuarios.genero = reader.GetString(6);
					oUsuarios.estado = reader.GetString(6);
					oUsuarios.semestre = reader.GetString(7);
					oUsuarios.carrera = reader.GetString(8);
					oUsuarios.valorID = reader.GetInt32(9);
					oUsuarios.idAlumno = reader.GetInt32(10);
					oUsuarios.idUsuario = reader.GetInt32(11);
					oUsuarios.idUsuarioTipo = reader.GetInt32(12);
					lista.Add(oUsuarios);
				}
				return lista;
			}
			catch (Exception)
			{

				return lista;
			}
			finally
			{
				oBase.CerrarConexion();
			}
			
		}
		public List<Usuarios> GetListaEstudiantesByDocente()
		{
			List<Usuarios> lista = new List<Usuarios>();
			BaseDatos oBase = new BaseDatos();
			SqlDataReader reader;
		   
			try
			{
				string consulta = string.Format("sp_getListaEstudiantesByDocente");
				SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("@idDocente",idDocente);
				comando.Parameters.AddWithValue("@nivel",nivel);
				comando.Parameters.AddWithValue("@idHorario",idHorario);
				oBase.Conectar();
				reader = comando.ExecuteReader();
				while (reader.Read())
				{
					Usuarios oUsu = new Usuarios();
					oUsu.documento = reader.GetString(0);
					oUsu.nombres = reader.GetString(1);
					oUsu.apellidos = reader.GetString(2);
					oUsu.parametro1 = reader.GetFloat(3);
					oUsu.parametro2 = reader.GetFloat(4);
					oUsu.parametro3 = reader.GetFloat(5);
					oUsu.parametro4 = reader.GetFloat(6);
					oUsu.examenFinal = reader.GetFloat(8);
					oUsu.supletorio = reader.GetFloat(7);
					oUsu.promedio = reader.GetFloat(9);
					oUsu.estado = reader.GetString(10);
					oUsu.descripcion = reader.GetString(11);
					oUsu.nombresYApellidos = reader.GetString(12);
					lista.Add(oUsu);
				}
			}
			catch (Exception)
			{

				lista = null;
			}
			finally
			{
				oBase.CerrarConexion();
			}
			
			return lista;
		}
		/// <summary>
		/// Método para actualizar calificaciones de los estudiantes
		/// </summary>
		/// <param name="lista">Lista de parametros de notas</param>
		/// <returns>Mensaje de correcto/error</returns>
		public string UpdateScoresAlumnos(List<Usuarios> lista)
		{
			int err = 0;
			int succ = 0;
			string mensaje = "";
			BaseDatos oBase = new BaseDatos();
			SqlDataReader reader;
			try
			{
				for (int i = 0; i < lista.Count; i++)
				{
					string state="";
					float nota=0;
                    float notaConSuple=0;
					string consulta = string.Format("sp_updateScoresAlumnos");
					SqlCommand comando = new SqlCommand();
					comando.Connection = oBase.conexion;
					comando.CommandText=consulta;
					comando.CommandType = CommandType.StoredProcedure;
					comando.Parameters.AddWithValue("documento", lista[i].documento);
					comando.Parameters.AddWithValue("param1",lista[i].parametro1);
					comando.Parameters.AddWithValue("param2", lista[i].parametro2);
					comando.Parameters.AddWithValue("param3", lista[i].parametro3);
					comando.Parameters.AddWithValue("param4", lista[i].parametro4);
					comando.Parameters.AddWithValue("examen", lista[i].examenFinal);
					comando.Parameters.AddWithValue("suple", lista[i].supletorio);
					//comando.Parameters.AddWithValue("prom", lista[i].promedio);
					nota=(lista[i].parametro1 + lista[i].parametro2 + lista[i].parametro3 + lista[i].parametro4 + lista[i].examenFinal);

					if ( nota >= 7)
					{
						state = "Aprobado";
                        comando.Parameters.AddWithValue("prom", nota);
					}
                    else
	                {
                       notaConSuple=(lista[i].parametro1 + lista[i].parametro2 + lista[i].parametro3 + lista[i].parametro4 + lista[i].supletorio);
                       if (notaConSuple >= 7)
                       {
                            state = "Aprobado";
                            comando.Parameters.AddWithValue("prom", notaConSuple);
                       }
                       else
                       {
                           if (nota > notaConSuple)
                           {
                               comando.Parameters.AddWithValue("prom", nota);
                               state = "Reprobado";
                           }
                           else
                           {
                               comando.Parameters.AddWithValue("prom", notaConSuple);
                               state = "Reprobado";
                           }
                           
                       }
	                }
					
					comando.Parameters.AddWithValue("estado", state);
					comando.Parameters.AddWithValue("idModulo", idModulo);
					oBase.Conectar();
					reader = comando.ExecuteReader();
					while (reader.Read())
					{
						mensaje = reader.GetString(0);
						if (mensaje == "ERROR AL SUBIR CALIFICACIONES" || mensaje == "NO EXISTE EL ALUMNO")
						{
							err++;
						}
						else
						{
							succ++;
						}
					}
					oBase.CerrarConexion();
				}
		   

			}
			catch (Exception)
			{

				throw;
			}
			finally
			{
				oBase.CerrarConexion();
			}
			return mensaje;
		}
		/// <summary>
		/// Metodo que servira para consultar calificaciones por alumno
		/// </summary>
		/// <returns>lista de calificaciones</returns>
		public List<Usuarios> GetCalificacionesByAlumno()
		{
			List<Usuarios> lista = new List<Usuarios>();
			BaseDatos oBase = new BaseDatos();
			SqlDataReader reader;
			try
			{
				string consulta = string.Format("sp_getCalificaciones");
				SqlCommand comando = new SqlCommand();
				comando.CommandText = consulta;
				comando.Connection = oBase.conexion;
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("idAlumno",idAlumno);
				oBase.Conectar();
				reader = comando.ExecuteReader();
				while (reader.Read())
				{
					Usuarios oUsu = new Usuarios();
					oUsu.descripcion = reader.GetString(0);
					oUsu.parametro1 = reader.GetFloat(1);
					oUsu.parametro2 = reader.GetFloat(2);
					oUsu.parametro3 = reader.GetFloat(3);
					oUsu.parametro4 = reader.GetFloat(4);
					oUsu.examenFinal = reader.GetFloat(5);
					oUsu.supletorio = reader.GetFloat(6);
					oUsu.promedio = reader.GetFloat(7);
					oUsu.estado = reader.GetString(8);
					lista.Add(oUsu);
				}
			}
			catch (Exception)
			{
				lista = null;
			}
			finally
			{
				oBase.CerrarConexion();  
			}
			return lista;
		}

        public List<Usuarios> GetCalificacionesByAlumnoHistorial()
        {
            List<Usuarios> lista = new List<Usuarios>();
            
            BaseDatos oBase = new BaseDatos();
            SqlDataReader reader;
            try
            {
                string consulta = string.Format("sp_getCalificacionesHistorial");
                SqlCommand comando = new SqlCommand();
                comando.CommandText = consulta;
                comando.Connection = oBase.conexion;
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("idAlumno", idAlumno);
                oBase.Conectar();
                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    Usuarios oUsu = new Usuarios();
                    oUsu.descripcion = reader.GetString(0);
                    oUsu.parametro1 = reader.GetFloat(1);
                    oUsu.parametro2 = reader.GetFloat(2);
                    oUsu.parametro3 = reader.GetFloat(3);
                    oUsu.parametro4 = reader.GetFloat(4);
                    oUsu.examenFinal = reader.GetFloat(5);
                    oUsu.supletorio = reader.GetFloat(6);
                    oUsu.promedio = reader.GetFloat(7);
                    oUsu.estado = reader.GetString(8);
                    oUsu.Codigo = reader.GetString(10);
                    lista.Add(oUsu);
                }
            }
            catch (Exception)
            {
                lista = null;
            }
            finally
            {
                oBase.CerrarConexion();
            }
            return lista;
        }

		public List<Usuarios> ReporteMatriculadosPorNivel()
		{
			List<Usuarios> lista = new List<Usuarios>();
			SqlDataReader reader;
			BaseDatos oBase = new BaseDatos();
			try
			{
				string consulta = string.Format("sp_ReporteMatriculadosPorNivel");
				SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("@nivel",nivel);
				comando.Parameters.AddWithValue("@ciclo",ciclo);
				comando.Parameters.AddWithValue("idModulo",idHorario);
                comando.Parameters.AddWithValue("tag",identificador);
                comando.Parameters.AddWithValue("idCarrera",idCarrera);
				oBase.Conectar();
				reader = comando.ExecuteReader();
                
				while (reader.Read())
				{
					Usuarios oUsu = new Usuarios();
					oUsu.num = reader.GetInt32(0);
					oUsu.apellidos = reader.GetString(1);
					oUsu.nombres = reader.GetString(2);
					oUsu.nivelDescripcion = reader.GetString(3);
					oUsu.horario = reader.GetString(4);
					oUsu.idAlumno = reader.GetInt32(5);
                    oUsu.estadoMatricula = reader.GetString(6);
                    oUsu.modulo = reader.GetString(7);
                    ///agregue este numero
                    string[] cadena = reader.GetString(6).ToString().Split(new Char[] { '-' });

                    oUsu.numeroMatricula =Convert.ToInt32(cadena[1]);

                    lista.Add(oUsu);
				}
			}
			catch (Exception ex)
			{
				lista = null;
			}
			finally
			{
				oBase.CerrarConexion();
			}
			return lista;
		}

		public List<string> GetDocenteAndModulo()
		{
			List<string> lista = new List<string>();
			BaseDatos oBase = new BaseDatos();
			SqlDataReader reader;
			try
			{
				SqlCommand comando = new SqlCommand("sp_getDocenteAndModulo",oBase.conexion);
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("nivel",nivel);
				comando.Parameters.AddWithValue("idModulo",idModulo);
				oBase.Conectar();
				reader = comando.ExecuteReader();
				while (reader.Read())
				{
					lista.Add(reader.GetString(0));
					lista.Add(reader.GetString(1));
				}
			}
			catch (Exception)
			{
				lista = null;
			}
			finally
			{
				oBase.CerrarConexion();
			}
			return lista ;
		}

		public List<string> GetUsuariosAutocomplete()
		{
			BaseDatos oBase = new BaseDatos();
			List<string> Alumnos = new List<string>();
			DataTable dt = new DataTable();
			try
			{
				SqlCommand comando = new SqlCommand("sp_getUsuariosAutocomplete", oBase.conexion);
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("documento", documento);
				SqlDataAdapter adaptador = new SqlDataAdapter(comando);
				adaptador.Fill(dt);
				
				for (int i = 0; i < dt.Rows.Count; i++)
				{
					Alumnos.Add(dt.Rows[i][0].ToString());
				}
				
			}
			catch (Exception)
			{
			   
			}
			 return Alumnos;
		}

		public List<Usuarios> GetDatosAlumnoRegistrado()
		{
			BaseDatos oBase = new BaseDatos();
			List<Usuarios> lista = new List<Usuarios>();
			SqlDataReader reader;
			try
			{
				SqlCommand comando = new SqlCommand("sp_getAlumnoRegistrado",oBase.conexion);
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("@apellidoAndNombre", apellidos);
				oBase.Conectar();
				reader = comando.ExecuteReader();
				while (reader.Read())
				{
					Usuarios oUsu = new Usuarios();
					oUsu.nombres = reader.GetString(0);
					oUsu.apellidos = reader.GetString(1);
					oUsu.documento = reader.GetString(2);
					oUsu.idGenero = reader.GetInt32(3);
					oUsu.genero = reader.GetString(4);
					oUsu.idCarrera = reader.GetInt32(5);
					oUsu.idSemestre = reader.GetInt32(6);
					oUsu.UltimoNivelAprobado = reader.GetString(7);
                    oUsu.estado = reader.GetString(8);
                    oUsu.idAlumno = reader.GetInt32(9);
					lista.Add(oUsu);
				}
			}
			catch (Exception)
			{
				lista = null;
			}
			finally
			{
				oBase.CerrarConexion();
			}
			return lista;
		}

		public string RegistrarExonerados()
		{
			string mensaje="";
			BaseDatos oBase=new BaseDatos();
			SqlDataReader reader;
			try
			{
				SqlCommand comando = new SqlCommand("sp_InsertRegistroExoneradosExistentes", oBase.conexion);
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("@documento", documento);
				comando.Parameters.AddWithValue("@idNivel", nivel);
				comando.Parameters.AddWithValue("@fecha", fechaEntrada);
				comando.Parameters.AddWithValue("@estadoModulo", estado);
				comando.Parameters.AddWithValue("@parametro1", parametro1);
				comando.Parameters.AddWithValue("@parametro2", parametro2);
				comando.Parameters.AddWithValue("@parametro3", parametro3);
				comando.Parameters.AddWithValue("@parametro4", parametro4);
				comando.Parameters.AddWithValue("@examen_final", examenFinal);
				comando.Parameters.AddWithValue("@supletorio", supletorio);
				comando.Parameters.AddWithValue("@promedio", promedio);
				oBase.Conectar();
				reader = comando.ExecuteReader();
				while (reader.Read())
				{ 
					mensaje = reader.GetString(0);
				}
			}
			catch (Exception ex)
			{
				mensaje = ex.Message;
			}
			finally
			{
				oBase.CerrarConexion();
			}
			return mensaje;
		}

		public string AlumnoRetirado()
		{   
			string mensaje="";
			SqlDataReader reader;
			BaseDatos oBase = new BaseDatos();
			try
			{
				SqlCommand comando = new SqlCommand("sp_retirarAlumno", oBase.conexion);
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("@idAlumno",idAlumno);
				comando.Parameters.AddWithValue("@ciclo", ciclo);
				oBase.Conectar();
				reader = comando.ExecuteReader();
				while (reader.Read())
				{
					mensaje = reader.GetString(0);
				}
			}
			catch (Exception ex)
			{
				mensaje = ex.Message;
			}    

			return mensaje;
		}

		public List<Usuarios> GetCalificacionesCondensado()
		{
			SqlDataReader reader;
			BaseDatos oBase = new BaseDatos();
			List<Usuarios> lista = new List<Usuarios>();
			try
			{
				SqlCommand comando = new SqlCommand("sp_getCalificacionesByCicloAndNivel", oBase.conexion);
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("ciclo", ciclo);
				comando.Parameters.AddWithValue("nivel", nivel);
				oBase.Conectar();
				reader = comando.ExecuteReader();
				while (reader.Read())
				{
					Usuarios oUsu = new Usuarios();
					oUsu.num = reader.GetInt32(0);
					oUsu.apellidos = reader.GetString(1);
					oUsu.nombres = reader.GetString(2);
					oUsu.promedio = reader.GetFloat(3);
					lista.Add(oUsu);
				}
			}
			catch (Exception)
			{
				lista = null;
			}
			finally
			{
				oBase.CerrarConexion();
			}
			return lista;
		}

		public List<Usuarios> GetCalificacionesCompletas()
		{
			SqlDataReader reader;
			BaseDatos oBase = new BaseDatos();
			List<Usuarios> lista = new List<Usuarios>();
			try
			{
				SqlCommand comando = new SqlCommand("sp_getCalificacionesCompletoByCicloAndModulo", oBase.conexion);
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("ciclo", ciclo);
				comando.Parameters.AddWithValue("modulo", idModulo);
				oBase.Conectar();
				reader = comando.ExecuteReader();
				while (reader.Read())
				{
					Usuarios ousu = new Usuarios();
					ousu.num = reader.GetInt32(0);
					ousu.nombresYApellidos = reader.GetString(1);
					ousu.parametro1=reader.GetFloat(2);
					ousu.parametro2=reader.GetFloat(3);
					ousu.parametro3=reader.GetFloat(4);
					ousu.parametro4 = reader.GetFloat(5);
					ousu.subTotal = reader.GetFloat(6);
					ousu.examenFinal = reader.GetFloat(7);
					ousu.total = reader.GetFloat(8);
					ousu.supletorio = reader.GetFloat(9);
					ousu.promedio = reader.GetFloat(10);
					ousu.documento = reader.GetString(16);
					lista.Add(ousu);
				}
			}
			catch (Exception)
			{
				lista = null;
			}
			finally
			{
				oBase.CerrarConexion();
			}
			return lista;
			
		}

		public string UpdateScores()
		{
			BaseDatos oBase = new BaseDatos();
			string mensaje = "";
            SqlDataReader reader;
            try
            {
                string consulta = string.Format("sp_updateCalificacionesByAlumno");
                SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("@READING", parametro1);
                comando.Parameters.AddWithValue("@LISTENING", parametro2);
                comando.Parameters.AddWithValue("@SPEAKING", parametro3);
                comando.Parameters.AddWithValue("@WRITING", parametro4);
                comando.Parameters.AddWithValue("@EXAMEN_FINAL", examenFinal);
                comando.Parameters.AddWithValue("@SUPLETORIO", supletorio);
                comando.Parameters.AddWithValue("@SUB_TOTAL", subTotal);
                comando.Parameters.AddWithValue("@TOTAL", total);
                comando.Parameters.AddWithValue("@NOTA_FINAL", promedio);
                comando.Parameters.AddWithValue("@CICLO", ciclo);
                comando.Parameters.AddWithValue("@DOCUMENTO", documento);
                comando.Parameters.AddWithValue("@NIVEL", nivel);
                comando.Parameters.AddWithValue("@IDMODULO", idModulo);
                comando.Parameters.AddWithValue("@IDESTADO", idEstado);
                oBase.Conectar();
                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    mensaje = reader.GetString(0);
                }
            }
            catch (Exception ex)
            {
                mensaje = ex.Message;
            }
            finally
            {
                oBase.CerrarConexion();
            }

			return mensaje;
		}

		public List<Usuarios> Certificado()
		{
			List<Usuarios> lista = new List<Usuarios>();
			SqlDataReader reader;
			BaseDatos oBase = new BaseDatos();
			try
			{
				SqlCommand comando = new SqlCommand("sp_certificadoAprobacion",oBase.conexion);
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("@cedula",documento);
				oBase.Conectar();
				reader = comando.ExecuteReader();
				while (reader.Read())
				{
					Usuarios oU = new Usuarios();
					oU.nombresYApellidos = reader.GetString(0);
					oU.documento = reader.GetString(1);
					oU.carrera = reader.GetString(2);
					oU.nivel = reader.GetInt32(3);
					//oU.promedio = reader.GetFloat(4);
					lista.Add(oU);
				}
			}
			catch (Exception)
			{
				lista = null;
			}
			finally
			{
				oBase.CerrarConexion();
			}
			return lista;
		}
		public List<Usuarios> GetEgresadosCompleto()
		{
			List<Usuarios> lista = new List<Usuarios>();
			SqlDataReader reader;
			BaseDatos oBase = new BaseDatos();
			try
			{
				SqlCommand comando = new SqlCommand("sp_egresadosPivot", oBase.conexion);
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("idcarrera",idCarrera);
				oBase.Conectar();
				reader = comando.ExecuteReader();
				while (reader.Read())
				{
					Usuarios oUs = new Usuarios();
					oUs.num = reader.GetInt32(0);
					oUs.apellidos = reader.GetString(1);
					oUs.nombres = reader.GetString(2);
					oUs.primero = reader.GetValue(3);
					oUs.segundo = reader.GetValue(4);
					oUs.tercero = reader.GetValue(5);
					oUs.cuarto = reader.GetValue(6);
					oUs.quinto = reader.GetValue(7);
					oUs.sexto = reader.GetValue(8);
					oUs.septimo = reader.GetValue(9);
					oUs.octavo = reader.GetValue(10);
					lista.Add(oUs);
				}
			}
			catch (Exception)
			{
				lista = null;
			}
			finally
			{
				oBase.CerrarConexion();
			}
			return lista;
		}

		public List<Usuarios> GetReprobados()
		{
			BaseDatos oBase = new BaseDatos();
			SqlDataReader reader;
			List<Usuarios> lista = new List<Usuarios>();
			try
			{
				SqlCommand comando = new SqlCommand("sp_getReprobados",oBase.conexion);
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("ciclo",ciclo);
				oBase.Conectar();
				reader = comando.ExecuteReader();
				while (reader.Read())
				{
					Usuarios oUsu = new Usuarios();
					oUsu.numero = reader.GetInt32(0);
					oUsu.apellidos = reader.GetString(1);
					oUsu.nombres = reader.GetString(2);
					oUsu.nivel = reader.GetInt32(3);
					oUsu.Codigo = reader.GetString(4);
					oUsu.carrera = reader.GetString(5);
					lista.Add(oUsu);
				}

			}
			catch (Exception)
			{
				lista = null;
			}
			finally
			{ 
				
			}
			return lista;
		}
		public string UpdatePass()
		{
			BaseDatos oBase = new BaseDatos();
			string mensaje = "";
			SqlDataReader reader;
			try
			{
				SqlCommand comando = new SqlCommand("sp_updatePassTeacher", oBase.conexion);
				comando.CommandType = CommandType.StoredProcedure;
				comando.Parameters.AddWithValue("@claveActual",clave);
				comando.Parameters.AddWithValue("@claveNueva", claveNueva);
				comando.Parameters.AddWithValue("@documento", documento);
				oBase.Conectar();
				reader = comando.ExecuteReader();
				while (reader.Read())
				{
					mensaje = reader.GetString(0);
				}
			}
			catch (Exception ex)
			{
				mensaje = ex.Message;
			}
			finally
			{
				oBase.CerrarConexion();
			}
			return mensaje;
		}

        public List<Usuarios> Access(DateTime StartDate, DateTime EndDate)
        {
            List<Usuarios> lista = new List<Usuarios>();
            SqlDataReader reader;
            BaseDatos oBase = new BaseDatos();
            try
            {
                string consulta = string.Format("sp_getAccesos");
                SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("StartDate", StartDate);
                comando.Parameters.AddWithValue("EndDate", EndDate);
                oBase.Conectar();
                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    Usuarios oUsu = new Usuarios();
                    oUsu.documento = reader.GetString(0);
                    oUsu.nombresYApellidos = reader.GetString(1);
                    oUsu.fecha = reader.GetString(2);
                    oUsu.ip = reader.GetString(3);
                    lista.Add(oUsu);
                }
            }
            catch (Exception)
            {

                lista = null;
            }
            finally
            {
                oBase.CerrarConexion();
            }

            return lista;
        }

        public List<Usuarios> GetExonerados()
        {
            BaseDatos oBase = new BaseDatos();
            List<Usuarios> lista = new List<Usuarios>();
            SqlDataReader reader;
            try
            {
                string consulta = string.Format("sp_getExoneradosReort");
                SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("@fechaInicio", fechaInicio);
                comando.Parameters.AddWithValue("@fechaFin", fechaFin);
                oBase.Conectar();
                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    Usuarios oUsu = new Usuarios();
                    oUsu.nombresYApellidos = reader.GetString(0);
                    oUsu.nivel = reader.GetInt32(1);
                    oUsu.fecha = reader.GetString(2);
                    oUsu.promedio = reader.GetFloat(3);
                    oUsu.idExonerado = reader.GetInt32(4);
                    lista.Add(oUsu);
                }
            }
            catch (Exception)
            {
                lista = null;
            }
            finally
            {
                oBase.CerrarConexion();
            }
            return lista;
        }

        public string EliminarExonerado()
        {
            string mensaje = "";
            BaseDatos oBase = new BaseDatos();
            SqlDataReader reader;
            try
            {
                string consulta = string.Format("sp_eliminarExonerado");
                SqlCommand comando = new SqlCommand(consulta, oBase.conexion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("@idExonerado", idExonerado);
                oBase.Conectar();
                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    mensaje = reader.GetString(0);
                }
            }
            catch (Exception ex)
            {
                mensaje = ex.Message;
            }
            finally
            {
                oBase.CerrarConexion();
            }
            return mensaje;
        }
	}
}
